# ******************** STEP 0 *************************以json形式加载数据
import json
import re

with open('data/do1_QA.json', 'r', encoding='utf-8') as f:
    datas = json.load(f)


# ******************** STEP 1 *************************定义函数，写正则表达式

def is_good_1(text):
    # 假如只有中文，没有 《 》 ，( ) {}  这类符号的，就认为是合规的
    if len(text) == len(re.findall(r'[\u4e00-\u9fa5]', text)):
        return True
    else:
        return False


def is_good_2(text):
    # 如果text文本第一个是《 最后一个是 》 ，并且中间没有 《 》 ，这种符号的，就认为是合规的
    if text[0] == '《' and text[-1] == '》':
        if '《' not in text[1:-1] and '》' not in text[1:-1]:
            return True
        else:
            return False
    else:
        return False


def is_good_3(text):
    # 假如没有 《 》
    if '《' not in text and '》' not in text:
        return True
    else:
        return False


def is_good_4(text):
    # 定义正则表达式
    pattern = r"^(《[^》]+》)(?:、(《[^》]+》))*$"

    # 使用正则表达式匹配
    match = re.match(pattern, text)

    # 如果匹配成功，返回True；否则返回False
    return bool(match)


def is_good_5(text):
    # 如果有、 返回true, 否则返回false
    if '、' in text:
        return True
    else:
        return False


# ******************** STEP 2 *************************遍历数据，流水线正则抽取，判断是否合规

good_num = 0
for data in datas:

    # 待处理的原始文本
    text = data['answer']

    if is_good_1(text):
        # 记录数量
        good_num += 1
        # 打印看看待抽取的文本
        # print(f'good1\tidx:{data["idx"]}\ttext:\t{text}')

        # 抽取法规: 直接返回
        data['laws_num'] = 1
        data['extract_laws'] = [text]
        data['re'] = 'good1'

        # 打印抽取的规法
        # print(f'extract_laws:   {data["extract_laws"]}')

    elif is_good_2(text):
        # 记录数量
        good_num += 1
        # 打印看看待抽取的文本
        # print(f'good2\tidx:{data["idx"]}\ttext:\t{text}')

        # 抽取法规: 抽取《》里面的内容
        data['laws_num'] = 1
        data['extract_laws'] = [text[1:-1]]
        data['re'] = 'good2'

        # 打印抽取的规法
        # print(f'extract_laws:   {data["extract_laws"]}')

    elif is_good_3(text):
        # 记录数量
        good_num += 1
        # 打印看看待抽取的文本
        # print(f'good3\tidx:{data["idx"]}\ttext:\t{text}')

        # 抽取法规: 通过 、符号进行分割spil,得到列表
        content_list = text.split('、')
        data['laws_num'] = len(content_list)
        data['extract_laws'] = content_list
        data['re'] = 'good3'

        # 打印抽取的规法
        # print(f'extract_laws:\t{data["extract_laws"]}')

    elif is_good_4(text):
        # 记录数量
        good_num += 1
        # 打印看看待抽取的文本
        # print(f'good4\tidx:{data["idx"]}\ttext:\t{text}')

        # 抽取法规: 通过 、符号进行分割spil,得到列表
        content_list = re.findall(r"《([^》]+)》", text)
        data['laws_num'] = len(content_list)
        data['extract_laws'] = content_list

        # 打印抽取的规法
        # print(f'extract_laws:\t{data["extract_laws"]}')
    # elif is_good_5(text):
    #     # 记录数量
    #     good_num += 1
    #     # 打印看看待抽取的文本
    #     print(f'good5\tidx:{data["idx"]}\ttext:\t{text}')

    else:
        print(f'answer is bad:   {text}')
        # print(f'{text}')
        ...

# 统计good_num
print(f'good_num:   {good_num}')

# ******************** STEP 3 *************************保存datas 到json文件
with open('data/do2_re.json', 'w', encoding='utf-8') as f:
    json.dump(datas, f, ensure_ascii=False, indent=4)
